package com.triones.api.mapper.interlace;

import com.ruoyi.common.core.mapper.BaseMapperPlus;
import com.triones.api.entity.interlace.dto.MasterBalanceDO;
import com.triones.api.entity.interlace.vo.MasterBalanceVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;

import java.math.BigDecimal;

/**
 * 主账户余额
 */
public interface MasterBalanceMapper extends BaseMapperPlus<MasterBalanceMapper, MasterBalanceDO, MasterBalanceVO> {

    /**
     * 原子性减少待换汇金额
     * @param id 主键ID
     * @param quoteAmount 要减少的金额
     * @return 更新记录数
     */
    @Update("UPDATE tr_master_balances SET wait_quote = wait_quote - #{quoteAmount}, update_time = #{updateTime} " +
        "WHERE id = #{id}")
    int decreaseWaitQuote(@Param("id") Long id,@Param("quoteAmount") BigDecimal quoteAmount, @Param("updateTime") Long updateTime);

    /**
     * 原子性增加待换汇金额
     * @param id 主键ID
     * @param quoteAmount 要增加的金额
     * @return 更新记录数
     */
    @Update("UPDATE tr_master_balances SET wait_quote = wait_quote + #{quoteAmount}, update_time = #{updateTime} " +
        "WHERE id = #{id}")
    int increaseWaitQuote(@Param("id") Long id,
                          @Param("quoteAmount") BigDecimal quoteAmount,
                          @Param("updateTime") Long updateTime);

    /**
     * 原子性减少虚拟可用金额
     * @param id 主键ID
     * @param amount 要减少的金额
     * @return 更新记录数
     */
    @Update("UPDATE tr_master_balances SET virtual_available = virtual_available - #{amount}, update_time = #{updateTime} " +
        "WHERE id = #{id}")
    int decreaseVirtualAvailable(@Param("id") Long id,@Param("amount") BigDecimal amount, @Param("updateTime") Long updateTime);

    /**
     * 原子性增加虚拟可用金额
     * @param id 主键ID
     * @param amount 要增加的金额
     * @return 更新记录数
     */
    @Update("UPDATE tr_master_balances SET virtual_available = virtual_available + #{amount}, update_time = #{updateTime} " +
        "WHERE id = #{id}")
    int increaseVirtualAvailable(@Param("id") Long id,
                          @Param("amount") BigDecimal amount,
                          @Param("updateTime") Long updateTime);






}
